package com.whcoding.base.project.dao;
import com.whcoding.base.project.pojo.CarrierPO;
import com.whcoding.base.project.pojo.OrmDeptCondition;
import com.whcoding.base.project.pojo.OrmDeptVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @author Manager
 */
@Mapper
@Repository
public interface DeptMapper {

	/**
	 * 新增
	 * @param deptVO
	 * @return
	 */
	 int addDept(OrmDeptVO deptVO);

	/**
	 * 根据ID 查询数据
	 * @param id
	 * @return
	 */
	OrmDeptVO queryDeptById(@Param("id") Long id);

	/**
	 * 查询全部数据
	 * @return
	 */
	List<OrmDeptVO> queryAllDept();

	/**
	 * 根据查询参数查询数据
	 * @param deptCondition
	 * @return
	 */
	List<OrmDeptVO> queryDeptByParm(@Param("dept") OrmDeptCondition deptCondition);

	/**
     * 更新数据
     * @param deptVO
     * @return
     */
    int updateOrmDept(OrmDeptVO deptVO);

	/**
	 * 批量更新
	 * @param list
	 * @return
	 */
	int updateOrmDeptList(List<OrmDeptVO> list);


    /**
     * 根据ID 删除数据
     * @param id
     * @return
     */
    int deleteOrmDeptById(Long id);


    /**
     * 新增一条数据
     * @param deptVO
     * @return
     */
    Integer addDeptOneByOne(OrmDeptVO deptVO);

    /**
     * 批量新增
     * @param deptVOS
     */
    void addDeptByOneSQL(@Param("deptVOS") List<OrmDeptVO> deptVOS);

	/**
	 * 新增或者更新
	 * 1.MYSQL中的ON DUPLICATE KEY UPDATE，是基于主键或者复合主键(PRIMARY KEY)或唯一索引(UNIQUE INDEX)使用的。
	 * 2.唯一索引/主键相同	更新原有数据
	 * 唯一索引/主键不同    插入新数据
	 * 3.如果已存在该唯一标示或主键就更新，如果不存在该唯一标示或主键则作为新行插入。
	 * 4.传递参数要修改主键 id
	 * 5.复合主键[多个主键、则需要吧多个字段一并传递]
	 * @param deptVOS
	 */
	void insertOrUpdateBatch(@Param("deptVOS") List<OrmDeptVO> deptVOS);

	/**
	 * aaa
	 * @param carrierPOS
	 */
	void insertCarrier(@Param("carrierPOS") List<CarrierPO> carrierPOS);


	/**
	 * update
	 *
	 * @param map
	 */
	void updateDeptList(Map<String,Object> map);


    /**
     * 查询数量
     * @return
     */
    Integer countByDept(Map<String, Object> map);

	/**
	 * 分页查询数据
	 * @param map
	 * @return
	 */
	List<OrmDeptVO> findByPageDept(Map<String, Object> map);


	/**
	 * 根据deptName 查询数据
	 * map为查询条件
	 * @param map
	 * @return
	 */
	Integer countByDeptByDeptName(Map<String, Object> map);

	/**
	 * 查询name
	 * @param map
	 * @return
	 */
	List<String> listDeptName(Map<String, Object> map);

	/**
	 * 查询deptNo和DeptName
	 * @param deptNoList
	 * @return
	 */
	List<Map<String,Object>> findDeptNameAndDeptNo(List<String> deptNoList);


}
